[菜鸟疑问]希尔排序与直接插入排序的比较

来源:百度知道 编辑:UC知道 时间:2024/07/04 09:23:55
想比较下两种排序需要的操作次数,就用C写了下,其中希尔排序具体操作我搞得太清楚,就分别按理解的两种方法各写了一个函数,代码如下。
比较之后发现个很有趣的现象:A跟B的操作次数是完全一样的!!!!然后C的大概会是AB的三分之二的样子。
想不通为什么A和B会完全一样啊!!!明明就是不一样的算法啊……还请高手指点下
在下只有50分了~问题解决的话一定悉数奉上

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int A(int b[],int n)
{
int i,j,k,m=0,a[n];
for(i=0;i<n;i++)
a[i]=b[i];
for(i=1;i<n;i++)
{
for(j=i;j>0;j--)
if(a[j]<a[j-1]) {k=a[j];a[j]=a[j-1];a[j-1]=k; m++;}
else break;
}
/* for(i=0;i<n;i++)
printf("%6d",a[i]);
printf("\n"); */
return m;
}

int B(int b[],int n)
{
int i,j,k,m=0,a[n],i1,j1;
for(i=0;i<n;i++)
a[i]=b[i];

for(i1=20;i1>=1;i1--)
if(n%i1==0)
for(j1=0;j1<i1;j1++)
for(i=1+j1

B是西尔么?如果是的话不对的
西尔是 间隔不断缩小的冒泡
可是为什么每次都是相邻的比较?
你的这一句:
if(a[j]<a[j-1]) {k=a[j];a[j]=a[j-1];a[j-1]=k; m++;}
你再仔细看看

l;l;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;olllllllllllllllllllllllllllllllllllllllllllllll.............................